package wodegua.d17_regex;

/**
 * String提供了一个匹配正则表达式的方法
 * public boolean matches(String regex)判断字符串是否匹配正则表达式，匹配返回true，不匹配返回false。
 * 正则表达式的书写规则
 *
 * 字符类(只匹配单个字符)
 * [abc]                    只能是a，b，或c
 * [^abc]                   除了a，b，c之外的任何字符
 * [a-zA-Z]                 a到z A到Z，包括(范围)
 * [a-d[m-p]]               a到d，或m到p
 * [a-z&&[def]]             d，e，或f(交集)
 * [a-z&&[^bc]]             a到z，除了b和c(等同于[ad-z])
 * [a-z&&[^m-p]]            a到z，除了m到p(等同于[a-1q-z]
 *
 * 预定义字符(只匹配单个字符)
 * .                        任何字符
 * \d                       一个数字:[0-9]
 * \D                       非数字:[^0-9]
 * \s                       一个空白字符:
 * \S                       非空白字符:[^\s]
 * \w                       [a-zA-Z_0-9]
 * \W                       [^\w] 一个非单词字符
 *
 * X?                       X , 一次或0次
 * X*                       X, 零次或多次
 * X+                       X，一次或多次
 *
 * x {n,m}                  X，至少n但不超过m次
 * 数量词
 * x {n}                    X，正好n次
 * x {n，}                   X，至少n次
 */
public class RegexTest2 {
    public static void main(String[] args) {
        System.out.println(checkPhone("13489081789"));
        System.out.println(checkPhone("0232222-12932423"));
        System.out.println(checkPhone("02312932423"));
        System.out.println(checkPhone("134890a1789"));
        System.out.println(checkPhone("023129a32423"));
        System.out.println("----------------------------------");
        System.out.println(checkEmail("9564@qq.com"));
        System.out.println(checkEmail("9564@qq.com.cn"));
        System.out.println(checkEmail("023129a32423"));
        System.out.println("----------------------------------");
        System.out.println(checkTime("00:00:00"));
    }

    /**
     * 目标:校验用户输入的电活是否合法。
     * 13489081789 023-12932423 02312932423
     */
    public static boolean checkPhone(String phone){
        return phone != null && phone.matches("(1[3-9]\\d{9})|(0\\d{2,5}-?[1-9]\\d{3,10})");
    }

    /**
     * 目标:校验用户输入的邮箱是否合法。
     */
    public static boolean checkEmail(String email){
        return email != null && email.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,}){1,2}");
    }

    /**
     * 目标:校验用户输入的时间是否合法。
     * 12:23:45
     */
    public static boolean checkTime(String time){
        return time != null && time.matches("\\w[0-23]:\\w[0-59]:\\w[0-59]");
    }
}
